home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 11 / CU Amiga Magazine's Super CD-ROM 11 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-06].iso / cucd / programming / oberonv4 / source / system / amigasystem.mod (.txt) < prev    next >
Oberon Text  |  1996-07-28  |  5KB  |  146 lines

  1. Syntax10.Scn.Fnt
  2. ParcElems
  3. Alloc
  4. Syntax24b.Scn.Fnt
  5. Syntax10b.Scn.Fnt
  6. FoldElems
  7. (* AMIGA *)
  8. MODULE AmigaSystem; (* RD 15-06-96 *)
  9. IMPORT Texts, Oberon, Amiga;
  10.     W: Texts.Writer;
  11. PROCEDURE Str(s: ARRAY OF CHAR);    BEGIN Texts.WriteString(W, s) END Str;
  12. PROCEDURE Ch(ch: CHAR);    BEGIN Texts.Write(W, ch) END Ch;
  13. PROCEDURE Integer(i: LONGINT);    BEGIN Texts.Write(W, " "); Texts.WriteInt(W, i, 0) END Integer;
  14. PROCEDURE Ln;    BEGIN Texts.WriteLn(W) END Ln;
  15. PROCEDURE Append(t: Texts.Text);    BEGIN ASSERT(t#NIL); Texts.Append(t, W.buf) END Append;
  16. PROCEDURE ScanFirst(VAR s: Texts.Scanner);    (* Scan first parameter *)
  17.     VAR sel: Texts.Text; beg, end, time: LONGINT;
  18. BEGIN
  19.     Texts.OpenScanner(s, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(s);
  20.     IF (s.class = Texts.Char) & (s.c = "^") OR (s.line # 0) THEN
  21.         Oberon.GetSelection(sel, beg, end, time);
  22.         IF time >= 0 THEN Texts.OpenScanner(s, sel, beg); Texts.Scan(s) END
  23. END ScanFirst;
  24. (* Set the time to wait between two runs of the main loop. If 0, main loop runs allways at low pri *)
  25. PROCEDURE SetInterval*;
  26.     VAR s: Texts.Scanner;
  27. BEGIN
  28.     ScanFirst(s);
  29.     IF (s.class=Texts.Int) & (s.i>=0) & (s.i<1000) THEN
  30.       Amiga.TicsToWait:=1000*s.i
  31. END SetInterval;
  32. PROCEDURE ShowMode*;
  33.         displayID:LONGINT; height, width, depth: INTEGER;
  34.         oscan:LONGINT; autoScroll, WBWindow, PrivateColors:BOOLEAN;
  35. BEGIN
  36.     Amiga.ReadScreenMode(displayID, height, width, depth, oscan, autoScroll, WBWindow, PrivateColors);
  37.     Str("Width "); Integer(width); Ln;
  38.     Str("Height "); Integer(height); Ln;
  39.     Str("Depth "); Integer(depth); Ln;
  40.     Str("AutoScroll ");
  41.     IF autoScroll THEN Str("TRUE") ELSE Str("FALSE") END;
  42.     Ln; Append(Oberon.Log)
  43. END ShowMode;
  44. PROCEDURE ChangeMode*;
  45.         res: INTEGER; s: Texts.Scanner;
  46.         displayID:LONGINT; height, width, depth: INTEGER; oscan:LONGINT;
  47.         autoScroll, WBWindow, PrivateColors: BOOLEAN;
  48.     PROCEDURE GetInt(VAR val: INTEGER; min, max: INTEGER);
  49.     BEGIN
  50.         Texts.Scan(s);
  51.         IF (s.class = Texts.Int) & (min <= s.i) & (s.i <= max) THEN val := SHORT(s.i) END;
  52.         Texts.Scan(s)
  53.     END GetInt;
  54. BEGIN
  55.     Amiga.ChangeMode(res);
  56.     IF res#0 THEN
  57.         Amiga.ReadScreenMode(displayID, height, width, depth, oscan, autoScroll, WBWindow, PrivateColors);
  58.         ScanFirst(s);
  59.         WHILE s.class = Texts.Name DO
  60.             IF s.s = "Width" THEN GetInt(width, 320, 16383)
  61.             ELSIF s.s = "Height" THEN GetInt(height, 200, 16383)
  62.             ELSIF s.s = "Depth" THEN GetInt(depth, 1, 8)
  63.             ELSIF s.s = "AutoScroll" THEN
  64.                 Texts.Scan(s);
  65.                 IF s.class = Texts.Name THEN
  66.                     IF s.s = "TRUE" THEN autoScroll := TRUE; Texts.Scan(s)
  67.                     ELSIF s.s = "FALSE" THEN autoScroll := FALSE; Texts.Scan(s)
  68.                     END
  69.                 END
  70.             ELSE Texts.Scan(s)
  71.             END
  72.         END;
  73.         Amiga.WriteScreenMode(displayID, height, width, depth, oscan, autoScroll, WBWindow, PrivateColors);
  74.         Str("changes take effect after restart!"); Ln;
  75.         Append(Oberon.Log)
  76. END ChangeMode;
  77. PROCEDURE ChangePri*;
  78.     VAR s: Texts.Scanner;
  79.     PROCEDURE GetInt(VAR val: SHORTINT; min, max: SHORTINT);
  80.     BEGIN
  81.         IF (s.class = Texts.Int) & (min <= s.i) & (s.i <= max) THEN val := SHORT(SHORT(s.i)) END;
  82.         Texts.Scan(s)
  83.     END GetInt;
  84. BEGIN
  85.     ScanFirst(s);
  86.     GetInt(Amiga.idlePri, -128, -31);
  87.     GetInt(Amiga.normalPri, Amiga.idlePri, 5);
  88.     Str("System.ChangePri idle normal ="); Integer(Amiga.idlePri); Integer(Amiga.normalPri);
  89.     Ln; Append(Oberon.Log); Amiga.Turbo
  90. END ChangePri;
  91. PROCEDURE TwoButtonMouse*;
  92. BEGIN
  93.     Amiga.useLAltAsMouse:=TRUE
  94. END TwoButtonMouse;
  95. PROCEDURE ThreeButtonMouse*;
  96. BEGIN
  97.     Amiga.useLAltAsMouse:=FALSE
  98. END ThreeButtonMouse;
  99. PROCEDURE UseQuitRequester*;
  100. BEGIN
  101.     Amiga.UseQuitRequester:=TRUE
  102. END UseQuitRequester;
  103. PROCEDURE PictPrintThresh*;
  104.     VAR s: Texts.Scanner;
  105.     PROCEDURE GetInt(VAR val: INTEGER; min, max: INTEGER);
  106.     BEGIN
  107.         IF (s.class = Texts.Int) & (min <= s.i) & (s.i <= max) THEN val := SHORT(s.i) END;
  108.         Texts.Scan(s)
  109.     END GetInt;
  110. BEGIN
  111.     ScanFirst(s);
  112.     GetInt(Amiga.PictPrintThresh, 0, 255)
  113. END PictPrintThresh;
  114. PROCEDURE PrinterName*;
  115.     VAR S: Texts.Scanner;
  116.     (* get parameters from Menu, Text or Selection *)
  117.     PROCEDURE GetPar(VAR S: Texts.Scanner): BOOLEAN;
  118.         VAR
  119.             text: Texts.Text;
  120.             beg, end, time: LONGINT;
  121.     BEGIN
  122.         Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos);
  123.         Texts.Scan(S);
  124.         IF S.class=Texts.Char THEN
  125.             IF S.c="^" THEN
  126.                 Oberon.GetSelection(text, beg, end, time);
  127.                 IF time=-1 THEN RETURN FALSE END;
  128.                 Texts.OpenScanner(S, text, beg);
  129.                 Texts.Scan(S)
  130.             END
  131.         END;
  132.         RETURN TRUE
  133.     END GetPar;
  134. BEGIN
  135.     IF GetPar(S) THEN
  136.         IF (S.class=Texts.Name) OR (S.class=Texts.String) THEN
  137.             COPY(S.s, Amiga.PrinterName)
  138.         END
  139.     END;
  140.     Str("Printer Name: ");
  141.     Str(Amiga.PrinterName); Ln; Append(Oberon.Log)
  142. END PrinterName;
  143. BEGIN
  144.     Texts.OpenWriter(W)
  145. END AmigaSystem.
  146.